﻿using BLL;
using HRP.Utilidades;
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HRP.Private.Vencimentos
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack && Session["EmpresaActual"] != null)
            {
                // Utilidade.ActualListaFacturas = Utilidade.ActualBD.Facturacao.ListaFacturas(Utilidade.ActualCliente.id, Utilidade.ActualEmpresa.id, 1);
                dropDownListAno.SelectedValue = DateTime.Now.Year.ToString();
                dropDownListMes.SelectedValue = DateTime.Now.Month.ToString();

                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                List<hrp_salarios_funcionarios> listaFuncionarios = Salario_BLL.Instance.ListaFuncionariosEmpresa(empresa.id).Where(x=>x.id==91).ToList();

                SetGrid();
            }
            gerarSalarioLabel.Text = string.Empty;
            gerarSalarioLabel.Visible = false;
            divLabel.Visible = false;
            gerarBut.Click += new EventHandler(gerarBut_Click);
            GridView1.RowCommand += new GridViewCommandEventHandler(GridView1_RowCommand);
            Page.PreRender += Page_PreRender;
        }

        void Page_PreRender(object sender, EventArgs e)
        {
            if (Session["EmpresaActual"] != null && Session["VistaEmpresaId"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                if (empresa.id != (int)Session["VistaEmpresaId"])//verifica se a empresa foi mudada
                {
                    SetGrid();
                }
            }
        }

        private void SetGrid()
        {
            if (Session["EmpresaActual"] != null && Session["idclient"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                Session["VistaEmpresaId"] = empresa.id;
                GridView1.DataSource = Facturacao_BLL.Instance.ListaFacturas((int)Session["idclient"], empresa.id, 1);
                GridView1.DataBind();
            }
        }

        protected void gvList_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            SetGrid();
            GridView1.PageIndex = e.NewPageIndex;
            GridView1.DataBind();
        }

        void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "idFunc")
            {
                int vencId = Convert.ToInt32(e.CommandArgument.ToString());
                //Utilidade.ActualFacturacaoGeral = Utilidade.ActualBD.Facturacao.ObterFacturaGeral(factId);
                Response.Redirect(Page.ResolveUrl("~/Private/Vencimentos/Vencimento.aspx?id="+vencId));
            }
        }



        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            if (Session["EmpresaActual"] != null && Session["idclient"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                string nextSort = "ascending";
                if (ViewState["sortDirection"] != null)
                    nextSort = ViewState["sortDirection"].ToString() == "ascending" ? "descending" : "ascending";

                ViewState["sortDirection"] = nextSort;
                var list = Facturacao_BLL.Instance.ListaFacturas((int)Session["idclient"], empresa.id, 1).AsQueryable();
                var orderedList = nextSort == "ascending" ? DataProvider.OrderBy(list, e.SortExpression) : DataProvider.OrderByDescending(list, e.SortExpression);
                GridView1.DataSource = orderedList.ToList();
                GridView1.DataBind();
            }
        }

        void gerarBut_Click(object sender, EventArgs e)
        {
            if (Session["EmpresaActual"] != null && Session["idclient"] != null && Session["userid"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                int clientID = (int)Session["idclient"];
                string userID = Session["userid"].ToString();
                List<hrp_salarios_funcionarios> listaFuncionarios = Salario_BLL.Instance.ListaFuncionariosEmpresa(empresa.id);
                if (listaFuncionarios.Count == 0)
                {
                    gerarSalarioLabel.Text = "Não existem funcionários associados a esta empresa.";
                    gerarSalarioLabel.Visible = true;
                    divLabel.Attributes.Add("class", "alert - alert-danger");
                    divLabel.Visible = true;
                    return;
                }
                //verificar na bd se ja foi criado
                int mes = Convert.ToInt32(dropDownListMes.SelectedValue);
                int ano = Convert.ToInt32(dropDownListAno.SelectedValue);

                if (Facturacao_BLL.Instance.ObterFacturaGeral(clientID, empresa.id, mes, ano) != null)
                {
                    gerarSalarioLabel.Text = "Ja foram gerados os vencimentos para o mes em questão.";
                    gerarSalarioLabel.Visible = true;
                    divLabel.Attributes.Add("class", "alert - alert-danger");
                    divLabel.Visible = true;
                    return;
                }
                else
                {
                    DateTime dataGeracao = DateTime.Now;

                    int vencimentoGeralId = Facturacao_BLL.Instance.criarFacturaGeral(clientID, empresa.id,
                        mes, ano, Convert.ToInt32(userID), Request.UserHostAddress, dataGeracao);

                    foreach (var funcionario in listaFuncionarios)
                    {
                        Facturacao_BLL.Instance.gerarFactura(vencimentoGeralId, funcionario.id, Convert.ToInt32(dropDownListAno.SelectedValue), Convert.ToDecimal(funcionario.salario), Convert.ToInt32(dropDownListMes.SelectedValue),
                              Convert.ToInt32(userID), clientID, Request.UserHostAddress, empresa.id, "AKZ", (decimal)funcionario.chefia, (decimal)funcionario.abono,
                             (decimal)funcionario.abono_familia, (decimal)funcionario.sub_turno, (decimal)funcionario.sub_transporte, (decimal)funcionario.sub_assiduidade,
                            (decimal)funcionario.sub_desempenho, (decimal)funcionario.sub_produtividade, (decimal)funcionario.sub_alimentacao, dataGeracao, funcionario.sub10, funcionario.sub_exposicao, funcionario.sub_contagio,
                             funcionario.sub_compensacao, 40, 22, Convert.ToDecimal(0.03), (decimal)funcionario.sindicato,(decimal)funcionario.subs_natal,(decimal)funcionario.subs_ferias);
                             //(decimal)funcionario.outros_subs, (decimal)funcionario.tempo_servico, 40, 22, Convert.ToDecimal(0.03), (decimal)funcionario.sindicato);

                    }
                    if (Facturacao_BLL.Instance.ActualizarFacturaGeral(vencimentoGeralId))
                    {
                        SetGrid();
                        gerarSalarioLabel.Text = "Vencimentos Gerados para o Mês e Ano Escolhidos";
                        divLabel.Attributes.Add("class", "alert - alert-success");
                    }
                    else
                    {
                        gerarSalarioLabel.Text = "Não existem funcionários elegíveis para geração de vencimento para o Mês e Ano Escolhidos";
                        divLabel.Attributes.Add("class", "alert - alert-danger");
                    }
                    gerarSalarioLabel.Visible = true;
                    divLabel.Visible = true;
                }
            }
        }
    }
}